#pragma once

#include <GL\glew.h>
#include <GLFW\glfw3.h>

#include <memory>

class Base_WindowCreate
{
private:
    std::shared_ptr<GLFWwindow> m_window;
    int m_width, m_height;

public:
    Base_WindowCreate();
    virtual ~Base_WindowCreate();
    std::shared_ptr<GLFWwindow> getWindow() const { return m_window; };
    virtual bool windowShouldClose() const { return glfwWindowShouldClose(m_window.get()); };
};

class Interface_app
{
public:
    virtual ~Interface_app() = default;
    virtual void init(std::shared_ptr<Base_WindowCreate> m_baseWindow) = 0;
    virtual void onRender() = 0;
};

int main_01_shader(int argc, char const *argv[]);